package com.uacp.sgb.datos.dominio.entidades;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Min;

@Entity
@NamedQueries
({
	@NamedQuery(name = "Bien.listarBienesAlta",
			query = "SELECT b FROM Bien b where b.condicion = 'alta' and b.area.dependencia = :dependencia")
})
@Inheritance(strategy=InheritanceType.JOINED)
public class Bien implements Serializable
{
	@Id
	@GeneratedValue
	private Long id; 
	private String estado;   // N = nuevo, B = bueno, R = regular, M = malo
	private String condicion = "alta";    // Alta, baja, pendiente
	private String codigoSBN; 
	private String descripcion; 
	private String observacion;
	
	@Min(value=0, message="Precio debe ser positivo")
	@Digits(integer=6, fraction=2, message="Precio debe tener maximo 2 decimales" )
	private Double precio;
	
	private Double valorLibro;
	
	@ManyToOne
	private Trabajador trabajador;
	
	@ManyToOne
	private TipoBien tipoBien;
	
	@ManyToOne
	private Dependencia area;
	
	public static String ESTADO = "N";
	
	public Bien()
	{
		estado = ESTADO;
	}

	public String getCondicion() 
	{
		return condicion;
	}

	public void setCondicion(String condicion) 
	{
		this.condicion = condicion;
	}
	
	public Double getPrecio() 
	{
		return precio;
	}

	public void setPrecio(Double precio) 
	{
		this.precio = precio;
		
		setValorLibro(precio);
	}


	public Trabajador getTrabajador() 
	{
		return trabajador;
	}

	public void setTrabajador(Trabajador trabajador) 
	{
		this.trabajador = trabajador;
	}

	public void setEstado(String estado) 
	{
		this.estado = estado;
	}

	public String getEstado() 
	{
		
		return estado;
	}

	public void setCodigoSBN(String codigoSBN) 
	{
		this.codigoSBN = codigoSBN;
	}
	
	public String getCodigoSBN()
	{
		return codigoSBN;
	}

	public String getDescripcion() 
	{
		return descripcion;
	}
	
	public Long getId() 
	{
		return id;
	}

	public void setId(Long id) 
	{
		this.id = id;
	}
	
	public TipoBien getTipoBien()
	{
		return tipoBien;
	}
	
	public void setTipoBien(TipoBien tipoBien)
	{
		this.tipoBien = tipoBien;
	}
	
	@Override
	public String toString() {
		return "Bien [Descripcion=" + descripcion + ", estado=" + estado + ", codigoSBN="
				+ codigoSBN + ", tipo=" + tipoBien + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) 
	{
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Bien other = (Bien) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

	public void setDescripcion(String descripcion) 
	{
		this.descripcion = descripcion;
	}

	public Dependencia getArea() 
	{
		return area;
	}

	public void setArea(Dependencia area) 
	{
		this.area = area;
	}

	public String getObservacion() {
		return observacion;
	}

	public void setObservacion(String observacion) {
		this.observacion = observacion;
	}

	public Double getValorLibro() {
		return valorLibro;
	}

	public void setValorLibro(Double valorLibro) {
		this.valorLibro = valorLibro;
	}
}
